package com.xingchi.tornado.security.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy;

import java.util.ArrayList;
import java.util.List;

/**
 * 安全控制相关配置
 *
 * @author xiaoya
 * @date 2024/9/27 14:02
 */
@Data
@ConfigurationProperties(prefix = "xingchi.tornado.security")
public class SecurityProperties {

    /**
     * 是否开启csrf默认关闭
     */
    private boolean csrf = false;

    /**
     * session过期时间
     */
    private Integer expiresIn = 3600;

    /**
     * 记住我时间
     */
    private Integer rememberMeTime = 3600;

    /**
     * 最大会话数，默认不限
     */
    private Integer maximumSessions = -1;

    /**
     * session创建模式
     */
    private SessionCreationPolicy sessionMode = SessionCreationPolicy.IF_REQUIRED;

    /**
     * 无需权限校验的列表
     */
    private List<String> allowList = new ArrayList<>();

    /**
     * 同一登录来源互斥
     */
    private SameSessionControl sameSessionControl = new SameSessionControl();

    /**
     * 同一登录来源互斥控制处理
     * 对于同一种登陆来源，可以配置允许登录的数量
     * 对于不同登录来源，可以多端登陆
     * {@link ConcurrentSessionControlAuthenticationStrategy}
     */
    @Data
    public static final class SameSessionControl {

        /**
         * 是否启用
         */
        private boolean enable = false;

        /**
         * 同一登录来源允许登录数量 默认1
         */
        private Integer allowCount = 1;
    }


}
